// use proc_macro::TokenStream;

// 声明式宏
macro_rules! double {
    ($x:expr) => {
        $x * 2
    };
}

// 多模式宏

macro_rules! say_hello  {
    () => { println!("你好!"); };
    ($name:expr) => { println!("你好, {}!", $name); };
}

// 派生宏
// 自动实现Debug接口
#[derive(Debug)]
struct Refs;

// 函数宏
// #[proc_macro]
// fn make_struct(input: TokenStream) -> TokenStream {
//     format!("struct {} {{}}", input.to_string().trim()).parse().unwrap()
// }

//make_struct!(MyStruct);

fn main() {
    let x = 3;
    let result = double!(x);
    println!("结果: {}", result);
    say_hello!();
    say_hello!("Iceman");
    let refs = Refs{};
    println!("{:?}", refs);
}
